package com.piece.core.pay.client;

import com.piece.core.framework.support.response.AjaxResponse;
import com.piece.core.pay.dto.*;

/**
 * 支付客户端SDK
 */
public interface PayClient {

    /**
     * 获得渠道编号
     */
    String getId();

    /**
     * 调用支付渠道，统一下单
     */
    AjaxResponse unifiedOrder(PayOrderUnifiedReqDTO reqDTO);

    /**
     * 解析支付单的通知结果
     */
    PayOrderNotifyRespDTO parseOrderNotify(PayNotifyDataDTO data) throws Exception;

    /**
     * 调用支付渠道，进行退款
     */
    AjaxResponse unifiedRefund(PayRefundUnifiedReqDTO reqDTO);

    /**
     * 解析支付退款通知数据
     */
    PayRefundNotifyDTO parseRefundNotify(PayNotifyDataDTO notifyData) throws Exception;

    /**
     * 验证是否渠道通知
     */
    default boolean verifyNotifyData(PayNotifyDataDTO notifyData) {
        return true;
    }

    /**
     * 判断是否为退款通知
     */
    default boolean isRefundNotify(PayNotifyDataDTO notifyData){
        return false;
    }

    /**
     * 查询支付结果
     */
    PayOrderNotifyRespDTO tradeUnifiedQuery(String outTradeNo);
}
